package rawwrs.action;

import java.io.ByteArrayInputStream;
import java.io.InputStream;

import java.util.*;

import rawwrs.bean.DepartamentoDTO;
import rawwrs.bean.DistritoDTO;
import rawwrs.bean.PropiedadDTO;
import rawwrs.bean.PropiedadDetalleDTO;
import rawwrs.bean.ProvinciaDTO;
import rawwrs.bean.UsuarioDTO;
import rawwrs.dao.jpa.PropiedadDetalleJPADAO;
import rawwrs.dao.jpa.PropiedadJPADAO;
import rawwrs.dao.jpa.UbigeoJPADAO;
import rawwrs.dao.jpa.UsuarioJPADAO;
import rawwrs.util.utilitarios;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import javax.servlet.ServletContext;

import org.apache.struts2.StrutsStatics;

public class PropiedadAction extends ActionSupport {
	
	private static final long serialVersionUID = 1L;
    private PropiedadDTO propiedad;
    private UsuarioDTO usuario;


	private PropiedadDetalleDTO propiedadDetalle1;
    private PropiedadDetalleDTO propiedadDetalle2;
    private PropiedadDetalleDTO propiedadDetalle3;
    private PropiedadDetalleDTO propiedadDetalle4;
    private PropiedadDetalleDTO propiedadDetalle5;
    private PropiedadDetalleDTO propiedadDetalle6;
    private String estadoDireccion;
    

	private int codigo_propiedad;
	PropiedadDetalleJPADAO pdjd = new PropiedadDetalleJPADAO();
    PropiedadJPADAO pjd = new PropiedadJPADAO();
    
    
    
    UbigeoJPADAO servicio_ubigeo = new UbigeoJPADAO();
    UsuarioJPADAO servicio_usuario = new UsuarioJPADAO();
    
    List<DepartamentoDTO> lista_departamento;
    List<ProvinciaDTO> lista_provincia;
    List<DistritoDTO> lista_distrito;
    
    private String codigo;
    private String nombre_distritos ="";




	private List<PropiedadDTO> propiedades;
    private List<PropiedadDetalleDTO> propdet; 
    private PropiedadDetalleDTO propiedaddet;
    

    
    
    
    public String obtenerTodosPropiedades(){
    	UsuarioDTO us = (UsuarioDTO)s_user.get("s_user_actual");
    	 propiedades = pjd.obtenerTodos(us.getId());
    	 return SUCCESS;
    }
    
    Map<String, Object>	s_user =	ActionContext.getContext().getSession();


    
    public String registrar(){  
    	lista_departamento = servicio_ubigeo.lista_departamentos(0);
    	return SUCCESS;
    }
    
    
    public String detalle_propiedad()throws Exception{  
    	
    	PropiedadDTO propi = new PropiedadDTO();
    	propi.setId(Integer.parseInt(codigo));    	
    	propiedad = pjd.obtenerPropiedad(propi); 
    	if(propiedad!=null){
    			nombre_distritos = 
    	    	servicio_ubigeo.nombre_departamento(propiedad.getDepartamento()).getNombre()
    	    	+"-"+servicio_ubigeo.nombre_provincia(propiedad.getProvincia()).getNombre()
    	    	+"-"+servicio_ubigeo.nombre_distrito(propiedad.getDistrito()).getNombre();    	
    			UsuarioDTO usu = new UsuarioDTO();
    			usu.setId(propiedad.getUsuario_id().getId());
    	usuario = servicio_usuario.obtenerUsuario(usu); 	
    			return SUCCESS;	
    	}else{
    		return ERROR;
    	}
    
    }
    
    
    public String eliminarPropiedad() throws Exception{
    	System.out.println("Metodo Eliminar del Action");
    	pdjd.eliminar(propiedad);    	
    	pjd.eliminar(propiedad);
    	UsuarioDTO us = (UsuarioDTO)s_user.get("s_user_actual");
    	propiedades = pjd.obtenerTodos(us.getId());
    	
  
    	
		return SUCCESS;
	}

	
	public void insertDetalle(PropiedadDetalleDTO propiedadd, PropiedadDTO pro) throws Exception{
		
		ActionContext ac = ActionContext.getContext();
		ServletContext sc = (ServletContext)ac.get(StrutsStatics.SERVLET_CONTEXT);
		
		System.out.println(sc.getRealPath("/upload/"));		
		String ruta = sc.getRealPath("/upload/");		
		propiedadd.setPropiedad(pro);		
		
		if(propiedadd.getArchivo()!=null){    		
			pdjd.insertar(propiedadd,ruta);
    	}
	}
	
	
	
    public String insertar()throws Exception{

    	UsuarioDTO us = (UsuarioDTO)s_user.get("s_user_actual");
    	propiedad.setUsuario_id(us);
    	try {
    		if(estadoDireccion!=null){
        		propiedad.setEstado_direccion(1);
        	}else{
        		propiedad.setEstado_direccion(0);
        	}
		} catch (Exception e) {			
		}
		
    	pjd.insertar(propiedad); 
    	
     	PropiedadDTO prop  = pjd.obtenerUltimo();   
     	
    	System.out.println("PROPIEDAD: "+prop.getId());
    	if(propiedadDetalle1!=null){
    		propiedadDetalle1.setRuta("1.jpg");
    		insertDetalle(propiedadDetalle1, prop);
    	}    	
    	if(propiedadDetalle2!=null){
    	 	propiedadDetalle2.setRuta("2.jpg");
    		insertDetalle(propiedadDetalle2, prop);
    	}
    	if(propiedadDetalle3!=null){
    		propiedadDetalle3.setRuta("3.jpg");
    		insertDetalle(propiedadDetalle3, prop);
    	}
    	if(propiedadDetalle4!=null){
    		propiedadDetalle4.setRuta("4.jpg");
    		insertDetalle(propiedadDetalle4, prop);
    	}
    	if(propiedadDetalle5!=null){
    		propiedadDetalle5.setRuta("5.jpg");
    		insertDetalle(propiedadDetalle5, prop);
    	}
    	if(propiedadDetalle6!=null){
    		propiedadDetalle6.setRuta("6.jpg");
    		insertDetalle(propiedadDetalle6, prop);
    	}
    	
    	return SUCCESS;
    }
    
    
    
    
	ArrayList<PropiedadDetalleDTO> list;
	
    public void buscar_actualizar_ingresar(int id,String number_foto,PropiedadDetalleDTO bean){
    	utilitarios util =   new utilitarios();		
    	
    	
 
    	
    	list= new ArrayList<PropiedadDetalleDTO>();
    	list = util.obtenerTodosPropiedades(id);
    	String cadena_aux="";
    	int lo_encontro = 0;
    	for (PropiedadDetalleDTO obj : list) {
    		cadena_aux = obj.getRuta().charAt(0)+"";    
    	   	
    		if(cadena_aux.equalsIgnoreCase(number_foto)){    			
    			try {    
    				lo_encontro=1;
    				PropiedadDTO prop  = new PropiedadDTO();
        			prop.setId(id);  
        			
        			bean.setId(obj.getId());
    				bean.setPropiedad(prop);				

    				ActionContext ac = ActionContext.getContext();
    				ServletContext sc = (ServletContext)ac.get(StrutsStatics.SERVLET_CONTEXT);
    				System.out.println(sc.getRealPath("/upload/"));		
    				String ruta = sc.getRealPath("/upload/");	
    				
					pdjd.actualizar(bean,ruta);
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
    		}
		}
    	
    	if(lo_encontro==0){
    		try {    			
    			PropiedadDTO prop  = new PropiedadDTO();
    			prop.setId(id);
    			insertDetalle(bean, prop);
			} catch (Exception e) {				
				e.printStackTrace();
			}
    	}
    
    }
    
    public String actualizar(){
    
    	try {
    		if(estadoDireccion!=null){
        		propiedad.setEstado_direccion(1);
        	}else{
        		propiedad.setEstado_direccion(0);
        	}
		} catch (Exception e) {			
		}    
    	
		pjd.actualizar(propiedad);
		
    	if(propiedadDetalle1!=null){
    		propiedadDetalle1.setRuta("1.jpg");    		
    		System.out.println("PROPIEDAD ID-1 : "+propiedad.getId());
    		buscar_actualizar_ingresar(propiedad.getId(), "1", propiedadDetalle1);
    	}    	
    	if(propiedadDetalle2!=null){
    	 	propiedadDetalle2.setRuta("2.jpg");
    	 	System.out.println("PROPIEDAD ID-2 : "+propiedad.getId());
    	 	buscar_actualizar_ingresar(propiedad.getId(), "2", propiedadDetalle2);
    	}
    	if(propiedadDetalle3!=null){
    		propiedadDetalle3.setRuta("3.jpg");
    		System.out.println("PROPIEDAD ID-3 : "+propiedad.getId());
    		buscar_actualizar_ingresar(propiedad.getId(), "3", propiedadDetalle3);
    	}
    	if(propiedadDetalle4!=null){
    		propiedadDetalle4.setRuta("4.jpg");
    		System.out.println("PROPIEDAD ID-4 : "+propiedad.getId());
    		buscar_actualizar_ingresar(propiedad.getId(), "4", propiedadDetalle4);
    	}
    	if(propiedadDetalle5!=null){
    		propiedadDetalle5.setRuta("5.jpg");
    		System.out.println("PROPIEDAD ID-5 : "+propiedad.getId());
    		buscar_actualizar_ingresar(propiedad.getId(), "5", propiedadDetalle5);
    	}
    	if(propiedadDetalle6!=null){
    		propiedadDetalle6.setRuta("6.jpg");
    		System.out.println("PROPIEDAD ID-6 : "+propiedad.getId());
    		buscar_actualizar_ingresar(propiedad.getId(), "6", propiedadDetalle6);
    	}
    	
     	lista_departamento=servicio_ubigeo.lista_departamentos(0);
    	lista_provincia= servicio_ubigeo.lista_provincias(propiedad.getDepartamento(),0);
    	lista_distrito=servicio_ubigeo.lista_distritos(propiedad.getProvincia(),0);
    	
    	
		mensaje="SUCCESS";			
		return SUCCESS;		
	}
    
    public String mostrarEditar()throws Exception{  
    	
    	PropiedadDTO propi = new PropiedadDTO();
    	propi.setId(propiedad.getId());
    	mensaje="";
    	propiedad = pjd.obtenerPropiedad(propi);   
    	
    	lista_departamento=servicio_ubigeo.lista_departamentos(0);
    	lista_provincia= servicio_ubigeo.lista_provincias(propiedad.getDepartamento(),0);
    	lista_distrito=servicio_ubigeo.lista_distritos(propiedad.getProvincia(),0);
    	
    	return SUCCESS;
    }
    
    	public String detalleFoto() throws Exception{
    		
    	
    	ActionContext context = ActionContext.getContext();
    	String[] codigos=(String[])context.getParameters().get("id");
    	
    	propiedadDetalle1=new PropiedadDetalleDTO();
    	System.out.println("Id enviado: " + codigos[0]);
    	propiedadDetalle1.setId(Integer.parseInt(codigos[0]));
    	propiedadDetalle1 = pdjd.obtenerDetallePropiedad(propiedadDetalle1);   
    	System.out.println("propeidad" + propiedadDetalle1.getId());
    	InputStream is = new ByteArrayInputStream(propiedadDetalle1.getFoto());
    	propiedadDetalle1.setIsFoto(is);
		return SUCCESS;
	}
    

    
    public String detallePropiedad(){
    	propiedad = pjd.obtenerPropiedad(propiedad);
		return SUCCESS;
	}

	public PropiedadDTO getPropiedad() {
		return propiedad;
	}

	public void setPropiedad(PropiedadDTO propiedad) {
		this.propiedad = propiedad;
	}

	public List<PropiedadDTO> getPropiedades() {
		return propiedades;
	}

	public void setPropiedades(List<PropiedadDTO> propiedades) {
		this.propiedades = propiedades;
	}

	public List<PropiedadDetalleDTO> getPropdet() {
		return propdet;
	}

	public void setPropdet(List<PropiedadDetalleDTO> propdet) {
		this.propdet = propdet;
	}

	public PropiedadDetalleDTO getPropiedadDetalle1() {
		return propiedadDetalle1;
	}

	public void setPropiedadDetalle1(PropiedadDetalleDTO propiedadDetalle1) {
		this.propiedadDetalle1 = propiedadDetalle1;
	}

	public PropiedadDetalleDTO getPropiedadDetalle2() {
		return propiedadDetalle2;
	}

	public void setPropiedadDetalle2(PropiedadDetalleDTO propiedadDetalle2) {
		this.propiedadDetalle2 = propiedadDetalle2;
	}

	public PropiedadDetalleDTO getPropiedadDetalle3() {
		return propiedadDetalle3;
	}

	public void setPropiedadDetalle3(PropiedadDetalleDTO propiedadDetalle3) {
		this.propiedadDetalle3 = propiedadDetalle3;
	}

	public PropiedadDetalleDTO getPropiedadDetalle4() {
		return propiedadDetalle4;
	}

	public void setPropiedadDetalle4(PropiedadDetalleDTO propiedadDetalle4) {
		this.propiedadDetalle4 = propiedadDetalle4;
	}

	public PropiedadDetalleDTO getPropiedadDetalle5() {
		return propiedadDetalle5;
	}

	public void setPropiedadDetalle5(PropiedadDetalleDTO propiedadDetalle5) {
		this.propiedadDetalle5 = propiedadDetalle5;
	}

	public PropiedadDetalleDTO getPropiedadDetalle6() {
		return propiedadDetalle6;
	}

	public void setPropiedadDetalle6(PropiedadDetalleDTO propiedadDetalle6) {
		this.propiedadDetalle6 = propiedadDetalle6;
	}

    public int getCodigo_propiedad() {
		return codigo_propiedad;
	}


	public void setCodigo_propiedad(int codigoPropiedad) {
		codigo_propiedad = codigoPropiedad;
	}
	
	
    public PropiedadDetalleDTO getPropiedaddet() {
		return propiedaddet;
	}

    

	public List<DepartamentoDTO> getLista_departamento() {
		return lista_departamento;
	}
	public void setLista_departamento(List<DepartamentoDTO> listaDepartamento) {
		lista_departamento = listaDepartamento;
	}
	public List<ProvinciaDTO> getLista_provincia() {
		return lista_provincia;
	}
	public void setLista_provincia(List<ProvinciaDTO> listaProvincia) {
		lista_provincia = listaProvincia;
	}
	public List<DistritoDTO> getLista_distrito() {
		return lista_distrito;
	}
	public void setLista_distrito(List<DistritoDTO> listaDistrito) {
		lista_distrito = listaDistrito;
	}
	public void setPropiedaddet(PropiedadDetalleDTO propiedaddet) {
		this.propiedaddet = propiedaddet;
	}
    public String getEstadoDireccion() {
		return estadoDireccion;
	}
    public void setEstadoDireccion(String estadoDireccion) {
		this.estadoDireccion = estadoDireccion;
	}
	public String getCodigo() {
		return codigo;
	}

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}

	public String getNombre_distritos() {
		return nombre_distritos;
	}
    public UsuarioDTO getUsuario() {
		return usuario;
	}
	public void setUsuario(UsuarioDTO usuario) {
		this.usuario = usuario;
	}


	public void setNombre_distritos(String nombreDistritos) {
		nombre_distritos = nombreDistritos;
	}
	
	private String mensaje="";	

		public String getMensaje() {
			return mensaje;
		}

		public void setMensaje(String mensaje) {
			this.mensaje = mensaje;
		}
    

}





    
    


